﻿<HTML>
    <HEAD>
        <TITLE>Configurable Process</TITLE>
    </HEAD>
    <BODY>
        <h3>Configurable Process</h3>
        
       Based on these requirements for a fully automated, fully configurable, fully extendable, fully traceable, predictable, stable and buildable deployment process we have chosen MSBuild with custom MSBuild tasks for the deployment.

       <h4>Powershell vs. MSBuild</h4>
       the deployment of solutions we often used a sequence of stsadm (-o addsolution) or PowerShell cmdlets (e.g. Add-SPSolution) in the past. The problem is that these operations cannot run based on conditions, e.g. "Only run Uninstall-SPSolution if the solution is really deployed". A more critical problem is that operations like "Install-SPSolution" are starting a timer job for the deployment but will not wait until the timer jobs finished. This waiting must be implemented separately.
        <br />We ended up in discussions about PowerShell and MSBuild: we need a great reuse of deployment operations (possible with standard MSBuild tasks or Powershell scripts), but it must be extendable in the same time (possible with MSBuild and Powershell). 
        <br />So the differences are minor. The final decision for MSBuild was the great logging functions in MSBuild:
        
        <UL>
          <li>add multiple loggers at the same time</li>
          <li>possibility to write custom loggers</li>
          <li>different log levels for verbose, detailed, normal etc.</li>
        </UL>
        
        Minor decision criteria were:

        <UL>
          <li>MSBuild also supports the deployment to SharePoint 2007 (useful for "legacy" SharePoint applications).</li>
          <li>MSBuild can show Windows forms during the deployment e.g. to collect user input (much harder in Powershell)</li>
          <li>Different parameters for different environments are stored in XML e.g. based on the Computername or a custom environment variable</li>
        </UL>



		<br /><br /><img src="./_img/NewItem.jpg" /><br /><br />
    </BODY>
</HTML>